Changer les pages d’erreurs par défaut d’Apache

Comme j’avais marre de voir les pages d’erreur par défaut d’Apache, j’ai décidé de changer tout ça.

J’ai donc fait une page toute simple, plus colorée et sympathique, en PHP, pour chacune des erreurs les plus communes. Par exemple, pour 404 :

<?php 
    header('HTTP/1.1 404 Not Found'); 
    $rand = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'); 
    $color = '#'.$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)]; ?>
<style>
body{
    background-color:<?php echo $color;?>;
    font-family:monospace;
    text-align:center;
}
div{
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%,-50%);
    background-color:black;
    color:white;
    margin:auto;
    padding:6em;
    width:fit-content;
}
</style>
<body>
    <div>
        <h1>There is nothing here!</h1>
        <p>But if you are wondering, the background color is <?php echo $color; ?>.</p>
    </div>
</body>
        

Un truc tout simple, donc. On me diras « ça répond pas au standards du web, il n’y a même pas de balise <html> ni <head>, et c’est n’importe quoi !! », mais on s’en fout, cette page sert juste à afficher un message d’erreur, et les navigateurs sont toujours capable de l’afficher correctement. De plus, la page envoyée fait moins de 600 octets, le document est parsé et affiché en moins de 100ms.

Ensuite, pour utiliser ces fichiers, il faut configurer ça dans Apache, bien sûr. On pourrait très bien ajouter quelques lignes dans apache2.conf, mais c’est plus propre de créer un fichier dans conf-available/.

Dans conf-available donc, je créé le fichier error-color.conf qui contient ceci :

Alias /errors/ /var/www/html/
ErrorDocument 400 /errors/400.php
ErrorDocument 401 /errors/401.php
ErrorDocument 403 /errors/403.php
ErrorDocument 404 /errors/404.php
ErrorDocument 408 /errors/408.php
ErrorDocument 418 /errors/418.php
ErrorDocument 500 /errors/500.php
ErrorDocument 503 /errors/503.php

Et pour finir, on applique les changements :

sudo a2enconf error-color
sudo service apache2 reload

Comme ça, ça fait une page d’erreur plus sympas, qui est toujours rééditable par le .htacess du site.